#include "header.h"

double HeavyTail() {
	return BPRand(arguments.k, arguments.p, arguments.a);
}

double P2Constant() {
	return arguments.d;
}

double P2Exponential() {
	return expoRand(arguments.mu);
}

double P2Uniform() {
	return unifRand(arguments.a, arguments.b);
}

class Scenario1 : public Scenario {
protected:
	void init();
};

class Scenario2Expo : public Scenario {
protected:
	void init();
};

class Scenario2Const : public Scenario {
protected:
	void init();
};

class Scenario2Unif : public Scenario {
protected:
	void init();
};

void Scenario1::init() {
	((Scenario *)this)->init();
	serverMgr.getServer(0).serviceDurationFunc(HeavyTail);
}

void Scenario2Expo::init() {
	((Scenario *)this)->init();
	serverMgr.getServer(0).serviceDurationFunc(P2Exponential);
}

void Scenario2Const::init() {
	((Scenario *)this)->init();
	serverMgr.getServer(0).serviceDurationFunc(P2Constant);
}

void Scenario2Unif::init() {
	((Scenario *)this)->init();
	serverMgr.getServer(0).serviceDurationFunc(P2Uniform);
}

Scenario1 scenario1;
Scenario2Expo scenario2;
Scenario2Const scenario3;
Scenario2Unif scenario4;

Scenario &scen1 = scenario1;
Scenario &scen2expo = scenario2;
Scenario &scen2const = scenario3;
Scenario &scen2unif = scenario4;
